/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package action;

import DAO.Constantes;
import DAO.DAO_Seccion;
import DAO.DAO_Usuario;
import actionForm.ModificarSeccionActionForm;
import clases.Seccion;
import clases.Usuario;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author Rafa
 */
public class ModificarSeccionAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String CANCEL = "cancel";
    private static final String MODIFICAR = "modificar";
    private static final String FAILURE = "failure";

    /**
     * This is the action called from the Struts framework.
     *
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        if (isCancelled(request)) {
            return mapping.findForward(CANCEL);
        } else {

            ModificarSeccionActionForm formulario = (ModificarSeccionActionForm) form;
            DAO_Seccion daoSeccion = new DAO_Seccion();
            DAO_Usuario daoUsuario = new DAO_Usuario();
            List<Usuario> listaTodosUsuarios = daoUsuario.consultaUsuarios(true);
            formulario.setListaTodosUsuarios(listaTodosUsuarios);
            
            if (formulario.getUpdate() == null) {

                Integer idSeccion = formulario.getIdSeccion();
                Seccion seccion = daoSeccion.consultaSeccionPorId(idSeccion, false);

                formulario.setDescripcion(seccion.getDescripcion());
                formulario.setNombre(seccion.getNombre());
                formulario.setEstadoSeccion(seccion.getEstadoSeccion().getEstado());
                formulario.setNumMaxArticulos(seccion.getNumMaxArticulos());

                return mapping.findForward(MODIFICAR);
            } else {
                if (formulario.getDescripcion().isEmpty() || formulario.getNombre().isEmpty()
                        || formulario.getIdResponsableSeccion().isEmpty()
                        || formulario.getIdResponsableMaquetacion().isEmpty()) {

                    formulario.setListaTodosUsuarios(listaTodosUsuarios);
                    formulario.setError(Constantes.getERROR_FORM());
                    return mapping.findForward(FAILURE);

                } else if (formulario.getNumMaxArticulos() == 0) {
                    formulario.setListaTodosUsuarios(listaTodosUsuarios);
                    formulario.setError("El numero maximo de articulos debe ser mayor de cero");
                    return mapping.findForward(FAILURE);

                } else {
                    Integer idSeccion = formulario.getIdSeccion();
                    String descripcionAct = formulario.getDescripcion();
                    String nombreAct = formulario.getNombre();
                    String estadoSeccionAct = formulario.getEstadoSeccion();
                    Integer numMaxArtAct = formulario.getNumMaxArticulos();

                    String idRespSeccion = formulario.getIdResponsableSeccion();
                    String idRespMaquetacion = formulario.getIdResponsableMaquetacion();

                    /*Se recogen los usuarios y se le asginan los roles correspondientes*/
                    Usuario userResSecc = daoUsuario.consultaUsuarioPorId(idRespSeccion,false);
                    Usuario userResMaq = daoUsuario.consultaUsuarioPorId(idRespMaquetacion, false);
                    if (userResSecc != null && userResMaq != null) {
                        userResSecc = daoUsuario.anadirRolUsuario(userResSecc, Constantes.getROL_SECCION(), false);
                        userResMaq = daoUsuario.anadirRolUsuario(userResMaq, Constantes.getROL_MAQUETACION(), false);
                    }

                    /*Se crea el conjunto de tipo Usuario y se añaden los dos usuarios*/
                    Set<Usuario> usuarios = new LinkedHashSet<>();
                    usuarios.add(userResSecc);
                    usuarios.add(userResMaq);

                    boolean ok = daoSeccion.modificaSeccion(descripcionAct, nombreAct, estadoSeccionAct, numMaxArtAct, idSeccion, usuarios, false);
                    if(ok == false){
                        formulario.setErrorAlert(Constantes.getERROR_FORM_MOD());
                    }
                    return mapping.findForward(SUCCESS);
                }

            }
        }

    }
}
